home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 4
/
Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso
/
Pearls
/
dev
/
Oberon
/
OberonV4
/
system
/
AmigaMath.Mod
(
.txt
)
< prev
next >
Wrap
Oberon Text
|
1995-10-27
|
5KB
|
146 lines
Syntax20b.Scn.Fnt
ParcElems
Alloc
Syntax24b.Scn.Fnt
Syntax10.Scn.Fnt
Syntax10b.Scn.Fnt
FoldElems
(* AMIGA *)
MODULE AmigaMath; (* RD 6.8.1995 *)
IMPORT
SYSTEM, Amiga, AmigaExec, AmigaBase;
BasLib, TransLib: LONGINT;
Dummy: AmigaBase.Regs;
PROCEDURE Entier*(s: REAL): LONGINT;
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(BasLib, -90, Dummy);
AmigaBase.LibCall(BasLib, -30, Dummy);
RETURN Dummy.d[0];
END Entier;
PROCEDURE IntToReal*(l: LONGINT; VAR d: REAL);
BEGIN
Dummy.d[0]:=l;
AmigaBase.LibCall(BasLib, -36, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END IntToReal;
(* 1 if s1>s2 0 if s1=s2 -1 if s1<s2 *)
PROCEDURE Cmp*(s1, s2: REAL): LONGINT;
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1);
Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2);
AmigaBase.LibCall(BasLib, -42, Dummy);
RETURN Dummy.d[0];
END Cmp;
(* 1 if s>0 0 if s=0 -1 if s<0 *)
PROCEDURE Tst*(s: REAL): LONGINT;
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(BasLib, -48, Dummy);
RETURN Dummy.d[0];
END Tst;
PROCEDURE Abs*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(BasLib, -54, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Abs;
PROCEDURE Neg*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(BasLib, -60, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Neg;
PROCEDURE Add*(s1, s2: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1);
Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2);
AmigaBase.LibCall(BasLib, -66, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Add;
PROCEDURE Sub*(s1, s2: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1);
Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2);
AmigaBase.LibCall(BasLib, -72, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Sub;
PROCEDURE Mul*(s1, s2: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1);
Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2);
AmigaBase.LibCall(BasLib, -78, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Mul;
PROCEDURE Div*(s1, s2: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1);
Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2);
AmigaBase.LibCall(BasLib, -84, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Div;
PROCEDURE Arctan*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(TransLib, -30, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Arctan;
PROCEDURE Cos*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(TransLib, -42, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Cos;
PROCEDURE Sin*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(TransLib, -36, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Sin;
PROCEDURE Ln*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(TransLib, -84, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Ln;
PROCEDURE Exp*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(TransLib, -78, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Exp;
PROCEDURE Sqrt*(s: REAL; VAR d: REAL);
BEGIN
Dummy.d[0]:=SYSTEM.VAL(LONGINT, s);
AmigaBase.LibCall(TransLib, -96, Dummy);
d:=SYSTEM.VAL(REAL, Dummy.d[0]);
END Sqrt;
(* returns s1/s2 *)
PROCEDURE Ratio*(s1, s2: LONGINT; VAR d: REAL);
VAR r1,r2: REAL;
BEGIN
IntToReal(s1, r1);
IntToReal(s2,r2);
Div(r1,r2,d);
END Ratio;
PROCEDURE e*(VAR d: REAL);
BEGIN
d:=SYSTEM.VAL(REAL, 0402DF854H);
END e;
PROCEDURE pi*(VAR d: REAL);
BEGIN
d:=SYSTEM.VAL(REAL, 040490FDBH);
END pi;
PROCEDURE TermProc;
BEGIN
Dummy.a[1]:=BasLib;
IF BasLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, Dummy);END;
Dummy.a[1]:=TransLib;
IF TransLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, Dummy);END;
END TermProc;
BEGIN
BasLib:=AmigaExec.OpenLibrary("mathieeesingbas.library", 0);
TransLib:=AmigaExec.OpenLibrary("mathieeesingtrans.library", 0);
Amiga.TermProcedure(TermProc);
END AmigaMath.